/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2022-10-04
 * Time: 10:37
 */
public class SingleLIst_MyQueue {

    public SingleLIst_MyQueue(){

    }

    // 由于Queue 是先进先出  符合尾插法 正序输出

    //利用单链表实现队列
    static class ListNode{
        public int val;
        public ListNode next;

        public ListNode(int val) {
            this.val = val;
        }
    }

    public ListNode head;  //记录单链表得头
    public ListNode tail;  //记录单链表得尾

    public int usedsize; // 记录队列有效个数

    // offer 入队不受容量限制 超容量不会报错    限制容量使用add
    public void offer(int data){
        ListNode node = new ListNode(data);
        //一个节点都没有是入队
        if(head == null){
            this.head = node;
            this.tail = node;
        }else{
            //入队
            this.tail.next = node;
            //尾节点向后走
            this.tail = tail.next;
        }

        usedsize++;
    }

    //出队
    public int poll(){
        if(head == null){
            throw new QueueEmptyException("队列为空,无法出队！");
        }
        //记录当前节点得val
        int ret = head.val;

        //删除当前节点
        head = head.next;
        //只有一个节点得时候 需要对队尾tail置空
        if(head == null){
            this.tail = null;
        }
        usedsize--;
        return ret;
    }

    public int peek(){
        if(head == null){
            throw new QueueEmptyException("队列为空,无法查看！");
        }

        return head.val;
    }

    public int getUsedsize(){
        return usedsize;
    }

    public boolean empty(){
        return usedsize == 0;
    }
}
